package com.Gehaltsrechner;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentValues;
import android.content.DialogInterface;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;


public class Einstellung extends Activity
{	
	private static Einstellung einstellung;
	
	private Button b_einstellung;
	private TextView gehalt;
	
	private Button pausenzeit_button;
	private TextView pausenzeit_textview;
	
	private Button zuschlaege_button;
	public Zuschlaege myZuschlag;
		
	private RadioButton radio_1;
	private RadioButton radio_2;
	
	private String value_g = "0.0";
	private String value_p = "0.0";
	
	private CheckBox suchfunktion_nutzen;
		
	public void onCreate(Bundle savedInstanceState) 
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.einstellungen);
    
    einstellung = this;

    //Gehalt festlegen
    b_einstellung = (Button) findViewById(R.id.einstellungs_button);
    b_einstellung.setText (Sprache.gehalt);
    
    //Gehalt anzeigen
    gehalt = (TextView) findViewById(R.id.gehalt);
    
    //TextSprache uebersetzen
    TextView textSprache = (TextView) findViewById(R.id.text_sprache);
    textSprache.setText (Sprache.text_sprache);
    
    //Festlegen der Waehrung
    TextView waehrung = (TextView) findViewById(R.id.textView1);
    waehrung.setText (Sprache.waehrung);
		
    //bestehendes Gehalt einlesen und anzeigen
		value_g = select(1);
		gehalt.setText (value_g);
		
		//bestehende Pausenzeit einlesen und anzeigen
		pausenzeit_button = (Button) findViewById(R.id.pause);
		pausenzeit_button.setText (Sprache.pause);
		pausenzeit_textview = (TextView) findViewById(R.id.Pause_TextView01);
		pausenzeit_textview.setText (select(4));
		//Uebersetzung Pausenzeit
		TextView pausenzeit = (TextView) findViewById(R.id.Pause_TextView02);
		pausenzeit.setText(Sprache.dauer);
		
		//Gehalt speichern
    b_einstellung.setOnClickListener(new View.OnClickListener() 
    {
        public void onClick(View v) 
        {
        	inputDialogGehalt ();
        }
    }); 
    
    //Pausenzeit speichern
    pausenzeit_button.setOnClickListener(new View.OnClickListener() 
    {
        public void onClick(View v) 
        {
        	inputDialogPause ();
        }
    }); 
    
    radio_1 = (RadioButton ) findViewById(R.id.englisch);
    radio_1.setOnClickListener(new View.OnClickListener() 
    {
      public void onClick(View v) 
      {
      	update(Lokal.english.toString (), "2");
      	Sprache.english ();
      	radio_1.setChecked (true);
      	radio_2.setChecked (false);
      	Toast.makeText(Einstellung.this, "The new setting will be visible when the application is restarted.", Toast.LENGTH_LONG).show();
      }
  	}); 
    radio_2 = (RadioButton ) findViewById(R.id.deutsch);
    radio_2.setOnClickListener(new View.OnClickListener() 
    {
      public void onClick(View v) 
      {
      	update(Lokal.german.toString (), "2");
      	Sprache.deutsch ();
      	radio_1.setChecked (false);
      	radio_2.setChecked (true);
      	Toast.makeText(Einstellung.this, "Die neue Einstellung wird sichtbar wenn die Anwendung neu gestartet wird.", Toast.LENGTH_LONG).show();
      }
  	}); 
    
    //RadioButton setzen
		if(select(2).equals (Lokal.english.toString ()))
		{
			radio_1.setChecked (true);
    	radio_2.setChecked (false);
		}
		if(select(2).equals (Lokal.german.toString ()))
		{
			radio_1.setChecked (false);
    	radio_2.setChecked (true);
		}  
		
		//Suchfunktion nutzen
		suchfunktion_nutzen = (CheckBox) findViewById(R.id.suchfunktion_nutzen);
		boolean suchfunktion = Boolean.parseBoolean (select(5));
		if(suchfunktion == true || suchfunktion == false)
		{
			suchfunktion_nutzen.setChecked (suchfunktion);
		}	

		suchfunktion_nutzen.setText(Sprache.suchfunktion_einblenden);
		suchfunktion_nutzen.setOnCheckedChangeListener(new OnCheckedChangeListener()
		{
		    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
		    {
		        insert (5, isChecked + "");
		        if(isChecked)
		        {
		        	alterDialog (Sprache.warnung_suchfunktion);
		        }
		    }
		});
		
		//Zusclaege ermitteln
		zuschlaege_button = (Button) findViewById(R.id.zuschlaege_button);
		zuschlaege_button.setText (Sprache.zuschlag);
		zuschlaege_button.setOnClickListener(new View.OnClickListener() 
    {
        public void onClick(View v) 
        {
        	zuschlaege_abfragen();
        }
    }); 
		
		//Monatsbeginn
		TextView monatsbeginn = (TextView) findViewById (R.id.monatsbeginn);
		monatsbeginn.setText(Sprache.monatsbeginn);
		TextView einesMonats = (TextView) findViewById (R.id.einesMonats);
		einesMonats.setText(Sprache.einesmonats);
		
		
		ArrayAdapter<?> adapter = ArrayAdapter.createFromResource(            
  			this, R.array.monatsbeginn, android.R.layout.simple_spinner_item);   
		Spinner monatsbeginn_spinner = (Spinner) findViewById (R.id.monatsbeginn_tag);
  	adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);    
  	monatsbeginn_spinner.setAdapter(adapter);
  	
  	monatsbeginn_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 
  	{
      public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) 
      {
      	insert (6, pos + "");
      }
      public void onNothingSelected(AdapterView<?> parent) 
      {
      }
  	});
  	
  	if(exist (6 + "") > 0)
  	{
    	int monatsbeginn_tag = Integer.parseInt (Einstellung.select (6));
    	monatsbeginn_spinner.setSelection (monatsbeginn_tag);
    	System.err.println(monatsbeginn_tag);
  	}
  }
	
	public void zuschlaege_abfragen()
	{
			AlertDialog.Builder alert = new AlertDialog.Builder(Einstellung.einstellung);		
			alert.setTitle("new Function / neue Funktion");
			alert.setMessage(Sprache.future);

			alert.setPositiveButton("Ok", new DialogInterface.OnClickListener()
			{
				public void onClick(DialogInterface dialog, int whichButton) 
				{
					myZuschlag = new Zuschlaege(einstellung, "");
			  	myZuschlag.show();
					myZuschlag.abbrechen.setOnClickListener(new View.OnClickListener() 
			    {
			        public void onClick(View v) 
			        {
			        	myZuschlag.closeDialog ();
			        }
			    });
			  }
			});
			alert.show ();
	}
	
	public static String select (int wert)
	{
		SQLiteDatabase db = null;
		Datenbank data = new Datenbank(GehaltsrechnerActivity.con);
		db = data.getWritableDatabase ();
		
		Cursor auswahl = db.query(
				false,
				Datenbank.DATENBANK_NAME,  //Tabelle
				new String[]  //Select
				{
					"Inhalt"
				},
				"Wert=?",
				new String[]
				{
						wert + ""
				},
				null,  //GROUP BY
				null,  //HAVING
				null,  //ORDER BY
				null   //LIMIT
				);  
				
		StringBuffer resultStr = new StringBuffer();
    
		while (auswahl.moveToNext()) 
    {
      resultStr.append(auswahl.getString(0));
    }
		auswahl.close();
		db.close();
		Log.w("SELECT EINSTELLUNG", resultStr.toString ());
		return resultStr.toString ();
	}
	
	public static int exist (String id)
 	{
 		SQLiteDatabase db = null;
		Datenbank data = new Datenbank(GehaltsrechnerActivity.con);
		db = data.getWritableDatabase ();

		Cursor auswahl = db.query(
				false,
				Datenbank.DATENBANK_NAME,  //Tabelle
				new String[]  //Select
				{
				},
				"Wert=?",
				new String[]
				{
						id
				},
				null,  //GROUP BY
				null,  //HAVING
				null,  //ORDER BY
				null   //LIMIT
				);  
		
		int anzahl = auswahl.getCount ();
		
		auswahl.close();
		db.close();
		
 		return anzahl;
 	}
	
	/**
	 * 
	 * @param wert = primary key
	 * @param inhalt = daten
	 */
	public static void insert(int wert, String inhalt)
 	{ 		
		System.err.println ("EXIST: " + exist(wert + ""));
    if(exist (wert + "") > 0)
    {
    	update(inhalt, wert + "");
    }
    else
    {
    	ContentValues werte = null;
  	 	SQLiteDatabase db = null;
  		Datenbank data = new Datenbank(GehaltsrechnerActivity.con);
  		db = data.getWritableDatabase ();
  		
    	werte = new ContentValues ();
      werte.put ("Wert", wert);
      werte.put ("Inhalt", inhalt);
      
      db.insert (Datenbank.DATENBANK_NAME, null, werte);
      data.close ();
      db.close ();
    }
 	}
		
	public static void update (String wert, String inhalt)
	{
		SQLiteDatabase db = null;
		Datenbank data = new Datenbank(GehaltsrechnerActivity.con);
		db = data.getWritableDatabase ();
		
		ContentValues werte = new ContentValues ();
		werte.put ("Inhalt", wert);
		db.update ("Rechner", werte, "Wert=?", new String[]{inhalt});
		db.close();
	}	

	public void inputDialogGehalt ()
	{
		AlertDialog.Builder alert = new AlertDialog.Builder(this);		
		alert.setTitle("");
		alert.setMessage(Sprache.gehalt_festlegen);

		// Set an EditText view to get user input 
		final EditText input = new EditText(this);
		alert.setView(input);

		alert.setPositiveButton("Ok", new DialogInterface.OnClickListener()
		{
			public void onClick(DialogInterface dialog, int whichButton) 
			{
				value_g = input.getText().toString ();
				try
				{
					double test = Double.parseDouble (value_g);
					if(test <= 0)
					{
						value_g = "0";
						inputDialogGehalt ();
						Toast.makeText(Einstellung.this, Sprache.positiver_wert, Toast.LENGTH_LONG).show();   
					}
					else
					{
						gehalt.setText (value_g);
						
						SQLiteDatabase db = null;
		    		Datenbank data = new Datenbank(einstellung);
		    		db = data.getWritableDatabase ();
		    		
		      	update (value_g, "1");
		      	db.close ();
		      	
		      	gehalt.setText (value_g);
		      	Toast.makeText(Einstellung.this, Sprache.gehalt_gespeichert, Toast.LENGTH_LONG).show();   
					}
				}
				catch(Exception ex)
				{
					Toast.makeText(Einstellung.this, Sprache.zahl_eingeben, Toast.LENGTH_LONG).show();   
					inputDialogGehalt();
				}
		  }
		});

		alert.setNegativeButton(Sprache.abbrechen, new DialogInterface.OnClickListener() 
		{
		  public void onClick(DialogInterface dialog, int whichButton) 
		  {
		    // Canceled.
		  }
		});
		alert.show();
	}
	
	public void inputDialogPause ()
	{
		AlertDialog.Builder alert = new AlertDialog.Builder(this);		
		alert.setTitle("");
		alert.setMessage(Sprache.pausenzeiten_speichern);

		// Set an EditText view to get user input 
		final EditText input = new EditText(this);
		alert.setView(input);

		alert.setPositiveButton("Ok", new DialogInterface.OnClickListener()
		{
			public void onClick(DialogInterface dialog, int whichButton) 
			{
				value_p = input.getText().toString ();
				try
				{
					double test = Double.parseDouble (value_p);
					if(test < 0)
					{
						value_p = "0";
						inputDialogPause ();
						Toast.makeText(Einstellung.this, Sprache.positiver_wert, Toast.LENGTH_LONG).show();   
					}
					else
					{
						pausenzeit_textview.setText (value_p);
						
						SQLiteDatabase db = null;
		    		Datenbank data = new Datenbank(einstellung);
		    		db = data.getWritableDatabase ();
		    		
		      	update (value_p, "4");
		      	db.close ();
		      	
		      	pausenzeit_textview.setText (value_p);
		      	Toast.makeText(Einstellung.this, Sprache.pausenzeiten_gespeichert, Toast.LENGTH_LONG).show();   
					}
				}
				catch(Exception ex)
				{
					Toast.makeText(Einstellung.this, Sprache.zahl_eingeben, Toast.LENGTH_LONG).show();   
					inputDialogPause();
				}
		  }
		});

		alert.setNegativeButton(Sprache.abbrechen, new DialogInterface.OnClickListener() 
		{
		  public void onClick(DialogInterface dialog, int whichButton) 
		  {
		    // Canceled.
		  }
		});
		alert.show();
	}	
	
	public static void alterDialog (String dialog)
	{
		AlertDialog.Builder alert = new AlertDialog.Builder(Einstellung.einstellung);		
		alert.setTitle("new Function / neue Funktion");
		alert.setMessage(dialog);

		alert.setPositiveButton("Ok", new DialogInterface.OnClickListener()
		{
			public void onClick(DialogInterface dialog, int whichButton) 
			{
				
		  }
		});
		alert.show ();
	}	
}
